<?php
/**
 * Created by PhpStorm.
 * User: huyi
 * Date: 2018/1/23
 * 工作队列模式  工作队列(又名：任务队列)
 */
/**
 * 我们将创建一个工作队列，用于多个工作人员之间分配耗时的任务。
 * 其主要的思想是避免立即执行资源密集型任务，并且阻塞进程等待任务完成
 * 在后台启动一个工作进程，读取工作队列中的任务，并且解释执行。当你运行多个工作进程时，他们共享工作队列中的任务
 * 这个思想在Web应用程序中特别有用，用于处理在短时间的HTTP请求中无法处理的复杂任务。
 */
require_once __DIR__ . './../vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;

$connection = new AMQPStreamConnection('localhost', 5672, 'huyi', 'huyi123');
$channel    = $connection->channel();

$queue_name = 'task_queue';

$channel->queue_declare('', false, true, false, false);
$data = implode(' ', array_slice($argv, 1));

if(empty($data)){
    $data = "Hello World!";
}
//将我们要发送的消息进行持久化处理 DELIVERY_MODE_PERSISTENT =2
$msg = new AMQPMessage($data,
    array('delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT)
);

$channel->basic_publish($msg, '', $queue_name);

$channel->close();
$connection->close();